package main

import "fmt"

func twoSum(nums []int, target int) []int {
	for i := 0; i < len(nums); i++ {
		for j := i + 1; j < len(nums); j++ {
			if target-nums[i] == nums[j] {
				return []int{i, j}
			}
		}
	}
	return nil
}

// 数组的一些操作

func main() {
	/*
		一维数组定义
	*/
	// 定义一个数组  var 数组变量名 [元素数量]T
	var arr_1 [3]int
	fmt.Println(arr_1)
	var arr_2 [3]string
	fmt.Println(arr_2)

	// 几种对数组初始化的方法
	// 1. 指定初始值
	var cityArray = [4]string{"北京", "南京", "上海", "杭州"}
	fmt.Println("cityArray is : ", cityArray)

	// 2 省略定义长度，由编译器判断
	var nameArray = [...]string{"fnn", "zcm", "jhy"}
	fmt.Println("nameArray is : ", nameArray)

	// 3. 使用索引的方式定义数组
	var numArray = [...]int{0: 1, 2: 2, 3: 3}
	fmt.Println("numArray is ", numArray)

	/*
		二维数组的定义
	*/
	// 1. 直接初始化二维数组
	CityArray := [3][2]string{
		{"哈尔滨", "大连"},
		{"长春", "沈阳"},
		{"北京", "青岛"},
	}
	fmt.Println("CityArray is ", CityArray)

	// 省略第一个的长度判断
	CityName := [...][2]string{
		{"哈尔滨", "大连"},
		{"长春", "沈阳"},
		{"北京", "青岛"},
		{"合肥", "阿克苏"},
	}
	fmt.Println("CityName is ", CityName)

	/*
		一维数组的遍历
	*/
	// 1. 使用for 循环进行遍历
	for i := 0; i < len(cityArray); i++ {
		fmt.Println(cityArray[i])
	}

	fmt.Println()
	// 2。 使用for range进行遍历
	/*
		for range 返回两个值，第一个是索引，第二个是值，只需要值的话
		索引用匿名参数 _ 代替就行
	*/
	for _, value := range nameArray {
		fmt.Println(value)
	}
	fmt.Println()

	/*二维数组遍历*/
	for _, value1 := range CityName {
		fmt.Println("一维数组展示为 : ", value1)
		for _, value2 := range value1 {
			fmt.Println("具体内容展示为: ", value2)
		}
	}

	/* 练习*/
	a := [...]int{1, 3, 5, 7, 8}
	sum := 0
	// 计算数组中数字的和
	for _, value := range a {
		sum += value
	}
	fmt.Println("practice sum is ", sum)

	// 返回两数之和的下标
	const target = 8
	for i := 0; i < len(a); i++ {
		for j := i; j < len(a); j++ {
			if target-a[i] == a[j] {
				fmt.Println(i, j)
			}
		}
	}

	const Target = 9
	nums1 := []int{2, 7, 11, 15}
	fmt.Println(nums1)

	fmt.Println(twoSum(nums1, Target))
}
